package cn.iocoder.yudao.module.api.product.spu.dto;

import cn.iocoder.yudao.module.api.dine.enums.DineAttributeEnum;
import cn.iocoder.yudao.module.api.product.sku.dto.PriceRespDTO;
import cn.iocoder.yudao.module.api.product.spu.enums.ProductPriceModeEnum;
import cn.iocoder.yudao.module.api.product.spu.enums.ProductSpuStatusEnum;
import cn.iocoder.yudao.module.api.shop.category.eums.ShopCategoryCodeEnum;
import lombok.Data;

import java.util.List;

/**
 * 产品 SPU 信息 Response DTO
 *
 * @author LeeYan9
 * @since 2022-08-26
 */
@Data
public class ProductSpuRespDTO extends PriceRespDTO {

    /**
     * 店铺编号
     */
    private Long shopId;

    /**
     * 产品名称
     */
    private String name;

    /**
     * 行业类目编号
     */
    private Long platformCategoryId;

    /**
     * 产品类型，可根据主营类目转换得来，如：mall、food、hotel
     *
     * @see ShopCategoryCodeEnum
     */
    private String type;

    /**
     * 产品分类编号
     */
    private Long categoryId;

    /**
     * 产品品牌编号
     */
    private Long brandId;

    /**
     * 产品封面图
     */
    private String picUrl;

    /**
     * 产品状态，{@link ProductSpuStatusEnum}
     */
    private Integer status;

    /**
     * 规格类型
     * false - 单规格
     * true - 多规格
     */
    private Boolean specType;

    /**
     * 库存
     */
    private Integer stock;
    /**
     * 单位名称
     */
    private String unitName;

    /**
     * 配送类型/服务方式数组
     * 对应 DeliveryTypeEnum 枚举
     */
    private List<Integer> deliveryTypes;

    /**
     * 物流配置模板编号
     * 对应 TradeDeliveryExpressTemplateDO 的 id 编号
     */
    private Long deliveryTemplateId;

    /**
     * 推荐类型
     */
    private Integer recommend;

    /**
     * 起购数量/起批数量
     */
    private Integer limitMinQuantity;
    /**
     * 限购数量
     */
    private Integer limitMaxQuantity;
    /**
     * 每次加购数量
     */
    private Integer stepQuantity;
    /**
     * 计价模式：1-按单品计价、2-按称量计价
     *
     * @see ProductPriceModeEnum
     */
    private Integer priceMode;
    /**
     * 菜肴属性：0-无、1-主食、2-荤菜、3-素菜、4-汤、5-调料、6-饮品、7-水果、20-锅底、50-套餐、98-餐盒、99-备注
     *
     * @see DineAttributeEnum
     */
    private Integer dishAttribute;
    private String dishAttributeName;

    @SuppressWarnings("unused")
    public String getDishAttributeName() {
        if (dishAttributeName == null) {
            return DineAttributeEnum.getByValue(getDishAttribute()).getName();
        }
        return dishAttributeName;
    }

    /**
     * 供应方名称
     */
    private String supplyName;
    /**
     * 供应方关联编号
     */
    private Long supplyRelatedId;

}
